package redis

import (
	"context"
	"github.com/go-redis/redis/v8"
	"goproject/src/config"
	"log"
	"strconv"
)

// Background返回一个非空的Context。 它永远不会被取消，没有值，也没有期限。
// 它通常在main函数，初始化和测试时使用，并用作传入请求的顶级上下文。
var ctx = context.Background()

var redisClient *redis.Client

type KeyValue struct {
	Key   string `form:"key" json:"key" binding:"required"`
	Value string `form:"value" json:"value" binding:"required"`
}

// 获取redis数据
func GetValue(key string) string {
	if nil == redisClient {
		InitRedis()
	}
	//获取key对应的value
	val, err := redisClient.Get(ctx, key).Result()
	if err != nil {
		panic(err)
	}
	return val
}

// 保存数据
func Put(keyValue KeyValue) {
	if nil == redisClient {
		InitRedis()
	}
	err := redisClient.Set(ctx, keyValue.Key, keyValue.Value, 0).Err()
	if err != nil {
		log.Fatal("redis存数据异常")
		// 抛出异常
		panic(err)
	}
}

// 连接redis
func InitRedis() {
	var redisCofig config.BaseMg = config.QueryRedisConfig()
	var addr string = redisCofig.Ip + ":" + strconv.Itoa(redisCofig.Port)
	redisClient = redis.NewClient(&redis.Options{
		Addr:     addr,
		Password: redisCofig.PassWord,
		DB:       0,
	})
}
